A software application may include any number of modules, and each module may be tested or validated individually. A software module may be tested or validated manually or automatically. In the former case, a person (e.g., a software testing engineer) may manually design test cases for the software module based on the design specification of the module, execute the module under the test cases, and check for module behavior or output that does not agree with the test cases. In the later case, a software testing tool, implemented as computer software or hardware, may automatically generate test cases for a software module under test, execute the module under test while simulating the test cases, and check for module behavior or output that does not agree with the test cases.